
import { setInfo, getInfo, removeInfo } from '@/utils/storage'
import { getMenuList } from '@/api/request/login/index'
// 导入拆分的路由文件
import { menuRoutes } from '@/router/menu.js'
import { baseRoute } from '@/router/index.js'
import { songFun } from '@/utils/index'
import { cloneDeep } from 'lodash'
export default {
    namespaced: true,
    state: () => ({
        menuList: getInfo('menuList', 'arry')
    }),
    mutations: {
        setList(state, payload) {
            state.menuList = payload
            setInfo('menuList', payload)
        },
        removeList(state) {
            state.menuList = []
            removeInfo('menuList')
        }
    },
    actions: {
        // ☆☆☆☆☆  知识点：当前模块, 要取 login.js 模块中的 token 数据，使用 context 中 rootState 对象访问全局仓库   ☆☆☆☆☆
        async getMenuAction({ commit, rootState }) {
            let token = rootState.login.loginInfo.token  // rootState.模块名称
            let { datas } = await getMenuList('/promision', { token })
            console.log('后端返回的路由标识', datas);
            console.log('前端导入的全部路由', menuRoutes);
            // 根据后端返回的路由标识, 定义一个方法，处理两个数组--返回匹配好的前端菜单导航
            let menuRouteList = songFun.menuRoteSure(menuRoutes, datas)
            console.log('匹配好的菜单导航menuRouteList', menuRouteList);

            commit('setList',menuRouteList)

            // 路由规则进行合并: 把匹配得到的菜单数据和拆分的路由规则进行合并
            //bug 处理：直接追加会影响原数据，导致每切换一次账号会追加一次数据. 所以要使用深拷贝--操作拷贝出来的数据
            let myBaseRoute = cloneDeep(baseRoute)
            myBaseRoute[0].children.push(...menuRouteList)
            console.log('myBaseRoute',myBaseRoute);

            // 不能直接合并到路由根数组里面，因为此时已经挂载到路由实例上了，直接追加是没有任何效果的
            // 所以,合并以后的路由规则返回出去，到路由守卫中去调路由方法合并到路由根数组里面
            return myBaseRoute
        },
    }
}